package com.huangpuweb.api.util;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;

/**
 * 生成缩略图
 */
public class ThumbnailatorUtil {

    public static BufferedImage zoom(String srcFileName) {
        // 使用源图像文件名创建ImageIcon对象。
        ImageIcon imgIcon = new ImageIcon(srcFileName);
        // 得到Image对象。
        Image img = imgIcon.getImage();
        ImageObserver imageObserver = imgIcon.getImageObserver();
        return zoom(img, imageObserver);
    }

    public static BufferedImage zoom(Image srcImage, ImageObserver imageObserver) {
        // 构造一个预定义的图像类型的BufferedImage对象。
        if (srcImage!=null&&(srcImage.getWidth(imageObserver)>0&&srcImage.getWidth(imageObserver)<1000)||(srcImage.getHeight(imageObserver)>0&&srcImage.getHeight(imageObserver)<800)) {
            BufferedImage buffImg = new BufferedImage(srcImage.getWidth(imageObserver) / 1, srcImage.getHeight(imageObserver) / 1, BufferedImage.TYPE_INT_RGB);
            // buffImg.flush();
            // 创建Graphics2D对象，用于在BufferedImage对象上绘图。
            Graphics2D g = buffImg.createGraphics();
            // 设置图形上下文的当前颜色为白色。
            g.setColor(Color.WHITE);
            // 用图形上下文的当前颜色填充指定的矩形区域。
            g.fillRect(0, 0, srcImage.getWidth(imageObserver) / 1, srcImage.getHeight(imageObserver) / 1);
            // 按照缩放的大小在BufferedImage对象上绘制原始图像。
            g.drawImage(srcImage, 0, 0, srcImage.getWidth(imageObserver) / 1, srcImage.getHeight(imageObserver) / 1, null);
            // 释放图形上下文使用的系统资源。
            g.dispose();
            // 刷新此 Image 对象正在使用的所有可重构的资源.
            srcImage.flush();
            return buffImg;
        }else if(srcImage!=null&&(srcImage.getWidth(imageObserver)>1000)||(srcImage.getHeight(imageObserver)>800)){
            BufferedImage buffImg = new BufferedImage(srcImage.getWidth(imageObserver) / 5, srcImage.getHeight(imageObserver) / 5, BufferedImage.TYPE_INT_RGB);
            // buffImg.flush();
            // 创建Graphics2D对象，用于在BufferedImage对象上绘图。
            Graphics2D g = buffImg.createGraphics();
            // 设置图形上下文的当前颜色为白色。
            g.setColor(Color.WHITE);
            // 用图形上下文的当前颜色填充指定的矩形区域。
            g.fillRect(0, 0, srcImage.getWidth(imageObserver) / 5, srcImage.getHeight(imageObserver) / 5);
            // 按照缩放的大小在BufferedImage对象上绘制原始图像。
            g.drawImage(srcImage, 0, 0, srcImage.getWidth(imageObserver) / 5, srcImage.getHeight(imageObserver) / 5, null);
            // 释放图形上下文使用的系统资源。
            g.dispose();
            // 刷新此 Image 对象正在使用的所有可重构的资源.
            srcImage.flush();
            return buffImg;
        }

        return null;
    }

    public static void main(String[] args) throws Exception {
        File dir = new File("E:\\test\\ddd");
        File[] files = dir.listFiles();
        for (int index=0;index<files.length;index++){
            try {
                BufferedImage img = ThumbnailatorUtil.zoom(files[index]+"");
                if (img!=null) {
                    ImageIO.write(img, "jpg", new File("E:\\picture\\" + files[index].getName()));
                }else {
                    System.out.println(files[index]);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

}
